
/*
 ============================================================================
 Name        : algoritmos_memoria.h
 Author      : mzavatto
 Version     :
 Copyright   :
 Description :
 ============================================================================
 */

#ifndef ALGORITMOS_MEMORIA_H_
#define ALGORITMOSMEMORIA_H_
#include <stdint.h>
#include <time.h>

#define maxmsz 18 //maxmsz:tamaño maximo de la memoria esto va a levantarse de un archivo
#define minb 1 //minimo tamaño de bloque
struct memory {
	int32_t flags;
	int32_t bsz; //bsz:tamaño de bloque
	char key[50]; //key: clave
	int32_t keysz; //keysz: tamaño de clave
	int32_t datasz; //datasz: tamaño del dato
	void* data; //key: puntero a la data
	int32_t stored; //si esta libre o no
	struct memory*link; //puntero al siguiente bloque
	time_t lastAccsess;
};

enum {
	FIFO = 0, LRU
};

enum {
	FIRST_FIT= 0, BEST_FIT, BUDDY_SYTEM
};

//void store(char *clave,char *valor,struct memory *current);
struct memory* find_prev(struct memory* current);
struct memory* best_fit(int32_t dataSize) ;
struct memory* first_fit(int32_t ps);
void compactar();
void dealocate_item(int32_t criterio, struct memory *start);
void dealocate_memory_clave(char* clave) ;
struct memory* get_fifo(struct memory *start);
struct memory* get_lru(struct memory *start);
void * get_value(char* clave,int32_t criterio);
void show_mem_status();



#endif /* ALGORITMOS_MEMORIA_H_ */
